Control Flow এবং শর্তাবলী
কটলিনে প্রোগ্রামের লজিক্যাল ফ্লো কন্ট্রোল করার জন্য বিভিন্ন কন্ট্রোল স্ট্রাকচার এবং শর্তাবলী রয়েছে। এর মধ্যে if, when, for, এবং while লুপ বেশ জনপ্রিয়। এগুলো ব্যবহার করে আপনি প্রোগ্রামের ফ্লো কন্ট্রোল করতে পারেন এবং নির্দিষ্ট শর্ত অনুযায়ী ভিন্ন ভিন্ন কাজ করতে পারেন। নিচে এই বিষয়গুলো নিয়ে বিস্তারিত আলোচনা করা হলো:
১. if এবং else শর্তাবলী
if এবং else শর্তাবলী প্রোগ্রামের নির্দিষ্ট শর্তের উপর ভিত্তি করে কোডের অংশ এক্সিকিউট করতে সাহায্য করে।
সাধারণ if-else উদাহরণ:
val number = 10
if (number > 0) {
println("Positive number")
} else if (number < 0) {
println("Negative number")
} else {
println("Zero")
}
ব্যাখ্যা:
- এখানে, যদি
numberপজিটিভ হয়, তবে"Positive number"প্রিন্ট হবে। - যদি
numberনেগেটিভ হয়, তবে"Negative number"প্রিন্ট হবে। - আর অন্য কোনো কন্ডিশন মিলে না গেলে
"Zero"প্রিন্ট হবে।
if স্টেটমেন্ট এক্সপ্রেশন হিসেবে: কটলিনে if একটি এক্সপ্রেশন হিসেবে ব্যবহার করা যায়। এর মানে, এটি একটি ভ্যালু রিটার্ন করতে পারে।
উদাহরণ:
val a = 5
val b = 10
val max = if (a > b) a else b
println("Max value is: $max") // আউটপুট: Max value is: 10
২. when স্টেটমেন্ট
when স্টেটমেন্ট হলো কটলিনে switch-এর বিকল্প এবং এটি অনেক বেশি ফ্লেক্সিবল। এটি শর্ত অনুযায়ী বিভিন্ন ব্লক এক্সিকিউট করতে পারে।
উদাহরণ:
val day = 3
val dayName = when (day) {
1 -> "Monday"
2 -> "Tuesday"
3 -> "Wednesday"
4 -> "Thursday"
5 -> "Friday"
6 -> "Saturday"
7 -> "Sunday"
else -> "Invalid day"
}
println(dayName) // আউটপুট: Wednesday
ব্যাখ্যা:
- এখানে
dayভ্যারিয়েবলের মান অনুযায়ী বিভিন্ন স্টেটমেন্ট এক্সিকিউট করা হবে। elseব্লক ব্যবহার করে ডিফল্ট ভ্যালু রিটার্ন করা যায়, যখন কোনো কন্ডিশন মিলে না।
কমপ্লেক্স শর্তাবলী ব্যবহার করা:
val score = 85
val grade = when {
score >= 90 -> "A"
score >= 80 -> "B"
score >= 70 -> "C"
score >= 60 -> "D"
else -> "F"
}
println("Grade: $grade") // আউটপুট: Grade: B
৩. লুপ: for এবং while
লুপ ব্যবহার করে কোডের একটি অংশ পুনরাবৃত্তি করে এক্সিকিউট করা যায়। কটলিনে for এবং while লুপের ব্যবহার দেখা যায়।
i) for লুপ
for লুপ সাধারণত একটি রেঞ্জ বা কালেকশন ইটারেট করার জন্য ব্যবহৃত হয়।
রেঞ্জের উপর for লুপ উদাহরণ:
for (i in 1..5) {
println(i) // ১ থেকে ৫ পর্যন্ত প্রিন্ট করবে
}
ডাউন টু লুপ:
for (i in 5 downTo 1) {
println(i) // ৫ থেকে ১ পর্যন্ত প্রিন্ট করবে
}
স্টেপ ব্যবহার করা:
for (i in 1..10 step 2) {
println(i) // ১, ৩, ৫, ৭, ৯ প্রিন্ট করবে
}
ii) while লুপ
while লুপ ব্যবহার করা হয় একটি নির্দিষ্ট শর্ত মিট না হওয়া পর্যন্ত কোডের অংশ বারবার এক্সিকিউট করার জন্য।
while লুপ উদাহরণ:
var i = 1
while (i <= 5) {
println(i)
i++
}
iii) do-while লুপ
do-while লুপ অন্তত একবার এক্সিকিউট হয়, তারপর শর্ত পরীক্ষা করে।
উদাহরণ:
var i = 1
do {
println(i)
i++
} while (i <= 5)
উপসংহার
কটলিনে কন্ট্রোল ফ্লো এবং শর্তাবলী প্রোগ্রামের লজিক্যাল ফ্লো কন্ট্রোল করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। if-else, when, for, এবং while লুপ ব্যবহার করে আপনি বিভিন্ন পরিস্থিতিতে প্রোগ্রামের অংশ এক্সিকিউট করতে পারেন। এগুলো ভালোভাবে বোঝা থাকলে আপনি কটলিনে আরও জটিল লজিক তৈরি করতে সক্ষম হবেন।
কটলিনে if-else এবং nested if স্টেটমেন্টের ব্যবহার অন্যান্য প্রোগ্রামিং ভাষার মতোই, কিন্তু কটলিনে এগুলো আরও সংক্ষিপ্ত ও সুবিধাজনক। নিচে প্রতিটি বিষয় বিস্তারিতভাবে ব্যাখ্যা করা হলো:
If-else স্টেটমেন্ট
if-else স্টেটমেন্ট কন্ডিশনাল (শর্তসাপেক্ষ) স্টেটমেন্ট হিসেবে ব্যবহৃত হয়, যা কোনো শর্ত সত্য হলে একটি ব্লক এক্সিকিউট করে এবং শর্ত মিথ্যা হলে অন্য একটি ব্লক এক্সিকিউট করে।
সাধারণ গঠন:
if (condition) {
// শর্ত সত্য হলে এই কোড ব্লকটি এক্সিকিউট হবে
} else {
// শর্ত মিথ্যা হলে এই কোড ব্লকটি এক্সিকিউট হবে
}
উদাহরণ:
val number = 10
if (number > 0) {
println("Number is positive")
} else {
println("Number is negative or zero")
}
এখানে, number ভ্যারিয়েবলটি যদি ০ এর চেয়ে বড় হয়, তাহলে "Number is positive" প্রিন্ট হবে। অন্যথায়, "Number is negative or zero" প্রিন্ট হবে।
If-else as an Expression
কটলিনে if-else একটি এক্সপ্রেশন হিসেবে ব্যবহার করা যায়, অর্থাৎ এটি একটি ভ্যালু রিটার্ন করতে পারে। এটি বিশেষভাবে উপযোগী, কারণ আপনি এক্সপ্রেশনটি সরাসরি একটি ভ্যারিয়েবলে অ্যাসাইন করতে পারেন।
উদাহরণ:
val number = -5
val result = if (number > 0) {
"Positive"
} else {
"Negative or Zero"
}
println(result) // এটি প্রিন্ট করবে "Negative or Zero"
এখানে, if-else এক্সপ্রেশনটি result ভ্যারিয়েবলে একটি ভ্যালু অ্যাসাইন করে।
Nested If
যদি একটি if বা else if ব্লকের ভেতরে আরেকটি if বা else ব্লক থাকে, সেটাকে nested if বলা হয়। এটি একাধিক শর্ত চেক করার জন্য ব্যবহার করা হয়।
সাধারণ গঠন:
if (condition1) {
// শর্ত ১ সত্য হলে
if (condition2) {
// শর্ত ২ সত্য হলে
} else {
// শর্ত ২ মিথ্যা হলে
}
} else {
// শর্ত ১ মিথ্যা হলে
}
উদাহরণ:
val number = 15
if (number > 0) {
if (number % 2 == 0) {
println("Number is positive and even")
} else {
println("Number is positive and odd")
}
} else {
println("Number is negative or zero")
}
এখানে, প্রথমে চেক করা হচ্ছে যে number ০ এর চেয়ে বড় কি না। যদি তা সত্য হয়, তাহলে ভেতরের if ব্লকটি চেক করবে সংখ্যাটি জোড় (even) কি না। যদি না হয়, তাহলে else ব্লকে গিয়ে বলবে যে সংখ্যাটি বিজোড় (odd)।
Nested If এড়ানোর উপায়: if-else Ladder
Nested if স্টেটমেন্ট অনেক সময় জটিল হয়ে যেতে পারে। একে সহজ করতে if-else ladder ব্যবহার করা যায়, যেখানে একাধিক শর্ত একসাথে চেক করা হয়।
উদাহরণ:
val number = -1
val result = if (number > 0) {
"Positive"
} else if (number < 0) {
"Negative"
} else {
"Zero"
}
println(result) // এটি প্রিন্ট করবে "Negative"
এখানে, একাধিক শর্ত এক লাইনে চেক করা হয়েছে, যা কোডকে সহজ ও সংক্ষিপ্ত করেছে।
উপসংহার
কটলিনে if-else এবং nested if স্টেটমেন্ট শর্তসাপেক্ষ কোড লিখতে সহজ এবং কার্যকর উপায়। কটলিনে if-else এক্সপ্রেশন হিসেবে ব্যবহার করার সুবিধা রয়েছে, যা কোডকে আরও সংক্ষিপ্ত ও পরিস্কার করে তোলে। nested if দিয়ে একাধিক শর্ত চেক করা যায়, কিন্তু if-else ladder ব্যবহার করে জটিলতা কমানো সম্ভব।
Kotlin-এ when এক্সপ্রেশন হল Java-এর switch স্টেটমেন্টের একটি আরও শক্তিশালী এবং আরও ফ্লেক্সিবল বিকল্প। এটি কন্ডিশনাল লজিক বা শর্ত ভিত্তিক সিদ্ধান্ত গ্রহণে ব্যবহার করা হয় এবং এটি অনেক বেশি রিডেবল ও সংক্ষিপ্ত।
when এক্সপ্রেশনের সাধারণ কাঠামো:
when (expression) {
value1 -> // code block
value2 -> // code block
else -> // default code block
}
expression: এটি একটি ভেরিয়েবল বা সরাসরি একটি এক্সপ্রেশন হতে পারে।value1,value2: বিভিন্ন মান যাexpressionএর সাথে তুলনা করা হয়।else: এটি ডিফল্ট ব্লক হিসেবে কাজ করে। যদি কোনো মান মেলে না, তাহলেelseব্লক এক্সিকিউট হয় (এটিswitchএরdefaultএর সমান)।
উদাহরণ ১: সাধারণ when এক্সপ্রেশন
fun main() {
val day = 3
val dayName = when (day) {
1 -> "Sunday"
2 -> "Monday"
3 -> "Tuesday"
4 -> "Wednesday"
5 -> "Thursday"
6 -> "Friday"
7 -> "Saturday"
else -> "Invalid Day"
}
println(dayName) // আউটপুট: Tuesday
}
- এখানে,
dayভেরিয়েবলের মানের উপর ভিত্তি করে একটি দিন নির্ধারণ করা হচ্ছে। যদি কোনো মান না মেলে, তাহলেelseব্লকে"Invalid Day"রিটার্ন করবে।
উদাহরণ ২: একাধিক মান পরীক্ষা করা
whenএক্সপ্রেশন একাধিক মান একসাথে চেক করতে পারে, যেমন:
fun main() {
val number = 7
when (number) {
1, 3, 5, 7, 9 -> println("Odd Number")
2, 4, 6, 8, 10 -> println("Even Number")
else -> println("Not in the range")
}
}
আউটপুট: Odd Number
এখানে number ভেরিয়েবলের মান একাধিক মানের (১, ৩, ৫, ৭, ৯) মধ্যে যদি মিলে যায়, তাহলে "Odd Number" প্রিন্ট করবে।
উদাহরণ ৩: রেঞ্জ বা ইন (in) অপারেটর ব্যবহার করে
whenএক্সপ্রেশন রেঞ্জ চেক করার জন্যও ব্যবহার করা যায়:
fun main() {
val score = 85
when (score) {
in 90..100 -> println("Excellent")
in 75..89 -> println("Good")
in 60..74 -> println("Pass")
else -> println("Fail")
}
}
আউটপুট: Good
এখানে, score এর মান যদি ৭৫ থেকে ৮৯ এর মধ্যে থাকে, তাহলে "Good" প্রিন্ট করবে।
উদাহরণ ৪: কন্ডিশন বা এক্সপ্রেশন ব্যবহার করা
whenশুধু মান বা রেঞ্জ নয়, সরাসরি কন্ডিশন বা এক্সপ্রেশনও ব্যবহার করতে পারে:
fun main() {
val x = -5
when {
x > 0 -> println("Positive Number")
x < 0 -> println("Negative Number")
else -> println("Zero")
}
}
আউটপুট: Negative Number
এখানে, সরাসরি কন্ডিশনাল চেক করা হচ্ছে এবং কন্ডিশন অনুযায়ী আউটপুট দেখানো হচ্ছে।
when এক্সপ্রেশনের সুবিধা:
শক্তিশালী এবং ফ্লেক্সিবল: এটি শুধুমাত্র মানের সাথে তুলনা করে না, এক্সপ্রেশন এবং কন্ডিশনও চেক করতে পারে।
সাধারণ এবং রিডেবল: when এর ব্যবহার কোডকে আরও সংক্ষিপ্ত এবং রিডেবল করে তোলে।
রিটার্ন ভ্যালু: when একটি এক্সপ্রেশন হিসেবে কাজ করতে পারে, যা সরাসরি ভ্যালু রিটার্ন করতে পারে। এটি একটি ফাংশন বা ভেরিয়েবলের মধ্যে রিটার্ন ভ্যালু স্টোর করা যায়।
উদাহরণ:
val result = when (val grade = 85) {
in 90..100 -> "A"
in 80..89 -> "B"
in 70..79 -> "C"
else -> "F"
}
println(result) // আউটপুট: B
উপসংহার
Kotlin-এর when এক্সপ্রেশন হল একটি অত্যন্ত শক্তিশালী কন্ডিশনাল স্টেটমেন্ট যা Java-এর switch স্টেটমেন্টের থেকে আরও বেশি ফ্লেক্সিবল এবং সহজবোধ্য। এটি একাধিক মান, রেঞ্জ, এবং কন্ডিশন এক্সপ্রেশনের উপর ভিত্তি করে কাজ করতে পারে, যা কোডকে আরও সংক্ষিপ্ত এবং পরিষ্কার করে। যদি আপনি কোডের ফ্লেক্সিবিলিটি ও রিডেবিলিটি বাড়াতে চান, তাহলে when এক্সপ্রেশন ব্যবহার করার পরামর্শ দেওয়া হয়।
For Loops এবং While Loops
কটলিনে for লুপ এবং while লুপ ব্যবহার করে একটি কোড ব্লককে নির্দিষ্ট সংখ্যক বার বা একটি নির্দিষ্ট শর্ত পূরণ না হওয়া পর্যন্ত পুনরাবৃত্তি করে এক্সিকিউট করা যায়। এই লুপগুলো কন্ট্রোল ফ্লো ম্যানেজ করার জন্য বেশ কার্যকর। নিচে for লুপ এবং while লুপ নিয়ে বিস্তারিত আলোচনা করা হলো:
১. for লুপ
for লুপ সাধারণত একটি রেঞ্জ বা কালেকশন ইটারেট করার জন্য ব্যবহৃত হয়। কটলিনে for লুপের সিনট্যাক্স বেশ সিম্পল এবং সহজবোধ্য।
i) রেঞ্জ ব্যবহার করে for লুপ
কটলিনে একটি রেঞ্জ ব্যবহার করে সহজেই for লুপ লেখা যায়।
উদাহরণ:
for (i in 1..5) {
println(i) // আউটপুট: 1, 2, 3, 4, 5
}
ব্যাখ্যা:
1..5হলো একটি রেঞ্জ, যা ১ থেকে ৫ পর্যন্ত সব সংখ্যা ধারণ করে।iপ্রতিটি ইটারেশনে রেঞ্জের পরবর্তী ভ্যালু ধারণ করবে এবংprintln(i)সেই ভ্যালুটি প্রিন্ট করবে।
ii) downTo ব্যবহার করে লুপ
downTo ব্যবহার করে রেঞ্জটি বিপরীতভাবে ব্যবহার করা যায়।
উদাহরণ:
for (i in 5 downTo 1) {
println(i) // আউটপুট: 5, 4, 3, 2, 1
}
ব্যাখ্যা:
5 downTo 1রেঞ্জটি ৫ থেকে ১ পর্যন্ত সব সংখ্যা ধারণ করে।
iii) step ব্যবহার করে লুপ
step ব্যবহার করে আপনি রেঞ্জের স্টেপ বা ধাপ নির্ধারণ করতে পারেন।
উদাহরণ:
for (i in 1..10 step 2) {
println(i) // আউটপুট: 1, 3, 5, 7, 9
}
ব্যাখ্যা:
- এখানে
1..10রেঞ্জটি ১ থেকে ১০ পর্যন্ত সংখ্যা ধারণ করে, এবংstep 2বলে প্রতিটি ধাপে ২ করে বৃদ্ধি পাবে।
iv) কালেকশনের উপর for লুপ
for লুপ কালেকশনের (যেমন: array, list) উপরও ব্যবহার করা যায়।
উদাহরণ:
val fruits = listOf("Apple", "Banana", "Cherry")
for (fruit in fruits) {
println(fruit)
}
ব্যাখ্যা:
- এখানে
fruitsহলো একটি লিস্ট যাApple,Banana, এবংCherryধারণ করে।forলুপ প্রতিটি ইটারেশনেfruitভ্যারিয়েবলে একটি আইটেম নিয়ে কাজ করবে।
২. while লুপ
while লুপ একটি নির্দিষ্ট শর্ত পূরণ না হওয়া পর্যন্ত কোডের একটি ব্লক পুনরাবৃত্তি করে এক্সিকিউট করে।
i) while লুপ
while লুপ শর্ত চেক করে এবং যদি শর্তটি সত্য হয় তবে কোড ব্লক এক্সিকিউট হয়। শর্ত মিথ্যা হলে লুপ বন্ধ হয়ে যায়।
উদাহরণ:
var i = 1
while (i <= 5) {
println(i)
i++
}
ব্যাখ্যা:
- এখানে,
iশুরুতে ১ ধরা হয়েছে। while (i <= 5)লুপটি শর্তটি চেক করবে, যদি শর্তটি সত্য হয় তবেprintln(i)এক্সিকিউট হবে এবংi১ করে বৃদ্ধি পাবে।- শর্ত মিথ্যা হলে লুপ বন্ধ হয়ে যাবে।
ii) do-while লুপ
do-while লুপ অন্তত একবার কোড ব্লক এক্সিকিউট করে তারপর শর্ত চেক করে। এটি while লুপের মতোই কাজ করে, তবে একটি বড় পার্থক্য হলো, do-while লুপে শর্ত চেক করার আগে কোড ব্লকটি এক্সিকিউট হয়।
উদাহরণ:
var i = 1
do {
println(i)
i++
} while (i <= 5)
ব্যাখ্যা:
- এখানে
iশুরুতে ১ ধরা হয়েছে। doব্লকের ভেতরের কোড এক্সিকিউট হবে এবং তারপরwhileশর্ত চেক করবে।- শর্ত মিথ্যা হলে লুপ বন্ধ হবে, তবে অন্তত একবার লুপটি চালানো হবে।
উপসংহার
for এবং while লুপ কটলিনে লুপিং বা রিপিটিটিভ কাজ করার জন্য অত্যন্ত কার্যকর। for লুপ রেঞ্জ বা কালেকশন ইটারেট করার জন্য ব্যবহার করা সহজ, যেখানে while এবং do-while লুপ ব্যবহার করা হয় নির্দিষ্ট শর্ত পূরণ না হওয়া পর্যন্ত কোড এক্সিকিউট করার জন্য।
কটলিনে Range এবং Iteration হলো লুপ ও কন্ডিশনাল চেকের জন্য একটি কার্যকরী এবং সরল উপায়। নিচে প্রতিটি অংশ বিস্তারিতভাবে ব্যাখ্যা করা হলো:
Range
কটলিনে Range হলো একটি সংখ্যা বা বর্ণমালার সিরিজ যা নির্দিষ্ট সীমার মধ্যে থাকে। কটলিনে Range তৈরি করতে .. অপারেটর ব্যবহার করা হয়। এটি সংখ্যার একটি নির্দিষ্ট সীমার মধ্যে চেক করা, লুপে ব্যবহৃত সংখ্যা নির্ধারণ করা, অথবা বর্ণমালা সিরিজে কাজ করার জন্য ব্যবহার করা যেতে পারে।
Range এর উদাহরণ:
val range = 1..5 // 1 থেকে 5 পর্যন্ত একটি রেঞ্জ
এখানে, range ভ্যারিয়েবলটি ১ থেকে ৫ পর্যন্ত সমস্ত সংখ্যা ধারণ করছে।
কিছু গুরুত্বপূর্ণ অপারেশন:
in কীওয়ার্ড: কোনো মান রেঞ্জের মধ্যে আছে কিনা চেক করতে ব্যবহৃত হয়।
এখানে, যদি number ১ থেকে ৫ এর মধ্যে থাকে, তাহলে এটি প্রিন্ট করবে যে এটি রেঞ্জের মধ্যে আছে।
val number = 3
if (number in 1..5) {
println("$number is within the range")
}
!in কীওয়ার্ড: কোনো মান রেঞ্জের বাইরে আছে কিনা চেক করতে ব্যবহৃত হয়।
val number = 6
if (number !in 1..5) {
println("$number is not within the range")
}
Iteration
কটলিনে লুপ ব্যবহারের জন্য for এবং while লুপ রয়েছে। for লুপ সাধারণত Range এবং Collection এর উপর ইটারেট (repeat) করতে ব্যবহৃত হয়। নিচে কয়েকটি উদাহরণ দেওয়া হলো:
for লুপ দিয়ে Iteration:
for লুপ দিয়ে আপনি সহজে একটি রেঞ্জের উপর ইটারেট করতে পারেন।
for (i in 1..5) {
println(i) // এটি ১ থেকে ৫ পর্যন্ত সংখ্যা প্রিন্ট করবে
}
Descending Order: যদি আপনি একটি রেঞ্জ উল্টো করে (descending order) ইটারেট করতে চান, তাহলে downTo ব্যবহার করতে পারেন।
for (i in 5 downTo 1) {
println(i) // এটি ৫ থেকে ১ পর্যন্ত সংখ্যা প্রিন্ট করবে
}
Step ব্যবহার করে: step ব্যবহার করে আপনি প্রতিটি ইটারেশনের মধ্যে কতগুলো স্টেপ নিয়ে এগোতে চান তা নির্ধারণ করতে পারেন।
for (i in 1..10 step 2) {
println(i) // এটি ১, ৩, ৫, ৭, ৯ প্রিন্ট করবে
}
until ব্যবহার করে: until ব্যবহার করে আপনি কোনো শেষ মান বাদ দিয়ে একটি রেঞ্জ তৈরি করতে পারেন। এটি শেষ মানের আগ পর্যন্ত ইটারেট করে।
for (i in 1 until 5) {
println(i) // এটি ১ থেকে ৪ পর্যন্ত প্রিন্ট করবে (৫ বাদ যাবে)
}
while এবং do-while লুপ
while এবং do-while লুপ কন্ডিশনের উপর নির্ভর করে ইটারেশন করার জন্য ব্যবহার করা হয়।
while লুপ:
var count = 5
while (count > 0) {
println(count)
count--
}
এখানে, লুপটি চলবে যতক্ষণ count এর মান ০ এর চেয়ে বড় থাকে এবং প্রতি ইটারেশনে count কমতে থাকবে।
do-while লুপ:
do-while লুপ কমপক্ষে একবার এক্সিকিউট হয়, তারপর শর্ত চেক করে।
var count = 3
do {
println(count)
count--
} while (count > 0)
এখানে, লুপটি প্রথমে do ব্লক এক্সিকিউট করবে এবং তারপর while শর্ত চেক করবে। যতক্ষণ শর্ত সত্য থাকবে, ততক্ষণ এটি চলবে।
উপসংহার
কটলিনে Range এবং Iteration ব্যবহারের মাধ্যমে আপনি সহজে একটি নির্দিষ্ট সিরিজ বা সংখ্যার উপর ইটারেট করতে পারবেন এবং শর্তসাপেক্ষ ইটারেশন করতে পারবেন। for লুপ এবং while লুপের সুবিধা নিয়ে আপনি সহজেই রেঞ্জ ও কালেকশনের উপর কাজ করতে পারবেন, যা আপনার কোডিংকে আরও সিম্পল এবং ইফেক্টিভ করে তুলবে।
Read more